package org.example.mall.admin.service.manage;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import org.example.mall.admin.model.entity.manage.Menu;
import org.springframework.security.core.GrantedAuthority;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 菜单权限表 服务类
 * </p>
 *
 * @author hzq
 * @since 2021-12-29
 */
public interface MenuService extends IService<Menu> {

    /**
     * 用户权限列表
     *
     * @param accountId 用户id
     * @param clientId  客户端id
     * @return 权限列表
     */
    List<GrantedAuthority> accountAuthorities(Integer accountId, String clientId);

    /**
     * 用户菜单列表
     *
     * @param accountId 用户id
     * @param clientId  客户端id
     * @return 菜单列表
     */
    List<Menu> accountMenus(Integer accountId, String clientId);

    /**
     * 查询菜单
     */
    List<Tree<Integer>> filterMenu(Set<Menu> menus, String type, Integer parentId);

    /**
     * 构建树
     *
     * @param clientId 客户端id
     * @param lazy     是否是懒加载
     * @param parentId 父节点ID
     * @return 树形菜单
     */
    List<Tree<Integer>> treeMenu(String clientId, boolean lazy, Integer parentId);

    /**
     * 查询角色菜单列表
     *
     * @param roleId 角色id
     * @return 菜单列表
     */
    List<Menu> findMenusByRoleId(Integer roleId);

    /**
     * 删除菜单
     *
     * @param menuId 菜单id
     * @return true/false
     */
    Boolean removeMenuById(Integer menuId);
}
